Põhjalik juhend Flaski mallipärilusest Jinja2 abil, hõlmates baasmalle, plokkide definitsioone ja praktilisi näiteid efektiivseks veebiarenduseks.
Flaski mallipärilus: Jinja2 mallide organiseerimise valdamine
Veebiarenduses on ülioluline säilitada ühtne välimus ja kasutusmugavus mitmel lehel. Flask, populaarne Pythoni veebiraamistik, kasutab Jinja2 paindlikku ja kiiret mallimootorit, et hõlbustada seda mallipäriluse kaudu. Mallipärilus võimaldab määratleda baasmalli ühiste elementidega ja seejärel seda teistes mallides laiendada, edendades koodi taaskasutatavust ja lihtsustades hooldust. See artikkel pakub põhjaliku juhendi Flaski mallipärilusest Jinja2 abil, hõlmates selle põhimõtteid, rakendamist ja parimaid tavasid.
Mis on mallipärilus?
Mallipärilus on disainimuster, mis võimaldab luua baasmalli, mis sisaldab teie veebisaidi põhistruktuuri ja paigutust. Lapsmallid saavad seejärel selle baasmalli pärida ja teatud sektsioone või "plokke" üle kirjutada, et kohandada oma sisu. See lähenemine minimeerib koodi dubleerimist, tagab järjepidevuse ja lihtsustab uuendusi teie veebirakenduses.
Kujutage ette seda kui maja ehitusplaani. Baasmall on üldine disain, sealhulgas vundament, seinad ja katus. Iga üksik tuba (lapsmall) pärib põhistruktuuri, kuid seda saab kohandada erinevate põrandakatete, värvi ja mööbliga.
Mallipäriluse eelised
- Koodi taaskasutatavus: Vältige üleliigset koodi, määratledes baasmallis ühised elemendid ja kasutades neid mitmel lehel.
- Järjepidevus: Tagage kogu oma veebisaidil ühtne välimus ja kasutusmugavus, hoides ühistele elementidele, nagu päised, jalused ja navigeerimismenüüd, ühte tõeallikat.
- Hooldatavus: Lihtsustage uuendusi ja muudatusi, tehes muudatusi baasmallis, mis levivad automaatselt kõikidele lapsmallidele.
- Organisatsioon: Struktureerige oma malle loogiliselt ja hierarhiliselt, muutes oma koodibaasi lihtsamini mõistetavaks ja hallatavaks.
- Vähendatud arendusaeg: Säästke aega ja vaeva, kasutades baasmalli uute lehtede lähtepunktina, selle asemel et neid nullist üles ehitada.
Võtmekontseptsioonide mõistmine
1. Baasmall
Baasmall on teie mallipäriluse struktuuri alus. See sisaldab ühiseid elemente, mida jagatakse kõigil või enamikul teie veebisaidi lehtedest. See hõlmab tavaliselt HTML-struktuur, CSS-stiililehti, JavaScripti faile, päist, jalust ja navigeerimismenüüd.
Näide baasmallist (base.html
):
{% block title %}My Website{% endblock %}
My Website
{% block content %}{% endblock %}
Selles näites määratleme põhilise HTML-struktuuri päise, navigeerimismenüü, põhilise sisuosa ja jalusega. Pange tähele {% block %}
silte, mis määratlevad sektsioonid, mida lapsmallides saab üle kirjutada.
2. Ploki definitsioonid
Plokid on baasmalli sees olevad kohatäited, mida lapsmallid saavad asendada või muuta. Need on määratletud, kasutades silte {% block %}
ja {% endblock %}
. Plokid võimaldavad teil süstida spetsiifilist sisu baasmalli erinevatesse osadesse.
Ăślaltoodud base.html
näites oleme määratlenud kaks plokki:
title
: See plokk määratleb HTML-dokumendi pealkirja.content
: See plokk määratleb lehe põhilise sisuosa.
3. Lapsmallid
Lapsmallid pärivad baasmalli ja saavad baasmallis määratletud plokke üle kirjutada. Baasmalli pärimiseks kasutage {% extends %}
silti lapsmalli alguses.
Näide lapsmallist (index.html
), mis laiendab base.html
malli:
{% extends 'base.html' %}
{% block title %}Home - My Website{% endblock %}
{% block content %}
Welcome to the Home Page!
This is the content of the home page.
{% endblock %}
Selles näites laiendame base.html
malli ja kirjutame ĂĽle title
ja content
plokid. title
plokk on seatud väärtusele "Avaleht - Minu veebisait" ja content
plokk on asendatud avalehe spetsiifilise sisuga.
4. Funktsioon super()
Funktsioon super()
võimaldab lapsmalli sees juurde pääseda baasmallis määratletud ploki sisule. See on kasulik, kui soovite ploki sisu täiendada või muuta seda täielikult asendamata.
Näide super()
kasutamisest content
ploki sisu lisamiseks:
{% extends 'base.html' %}
{% block content %}
{{ super() }}
This is additional content added to the base template's content block.
{% endblock %}
Selles näites sisestab funktsioon super()
content
ploki algse sisu base.html
mallist ja seejärel lisab lapsmall selle alla oma sisu.
Mallipäriluse rakendamine Flaskis
Mallipäriluse kasutamiseks Flaskis peate oma mallid organiseerima loogilisse kataloogi struktuuri ja konfigureerima Flaski oma mallide asukoha leidmiseks.
1. Kataloogi struktuur
Levinud kataloogi struktuur Flaski mallide jaoks on järgmine:
my_project/
app.py
templates/
base.html
index.html
about.html
contact.html
static/
style.css
script.js
Selles struktuuris sisaldab templates
kataloog kõiki HTML-malle, sealhulgas baasmalli ja lapsmalle. static
kataloog sisaldab staatilisi faile, nagu CSS-stiililehed ja JavaScripti failid.
2. Flaski konfiguratsioon
Vaikimisi otsib Flask malle kaustast nimega templates
, mis asub samas kaustas teie rakendusega. Saate seda kohandada, määrates Flaski rakenduse objekti atribuudi template_folder
.
Näide Flaski konfigureerimisest kohandatud mallikausta kasutamiseks:
from flask import Flask, render_template
app = Flask(__name__, template_folder='my_templates')
@app.route('/')
def index():
return render_template('index.html')
3. Mallide renderdamine
Malli renderdamiseks Flaskis kasutage funktsiooni render_template()
. See funktsioon võtab argumendiks mallifaili nime ja tagastab renderdatud HTML-stringi.
Näide index.html
malli renderdamisest:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
Lapsmalli renderdamisel kaasab Flask automaatselt baasmalli ja rakendab lapsmallis määratletud ploki ülekirjutused.
Praktilised näited
Näide 1: Lihtne blogi
Loome lihtsa blogi baasmalli ja eraldi mallidega blogipostituste jaoks.
base.html:
{% block title %}My Blog{% endblock %}
My Blog
{% block content %}{% endblock %}
post.html:
{% extends 'base.html' %}
{% block title %}{{ post.title }} - My Blog{% endblock %}
{% block content %}
{{ post.title }}
Published on: {{ post.date }}
{{ post.content }}
{% endblock %}
Selles näites laiendab post.html
mall base.html
malli ja kirjutab ĂĽle title
ja content
plokid blogipostituse pealkirja, kuupäeva ja sisuga. Muutuja post
edastatakse mallile Flaski marsruudist.
app.py:
from flask import Flask, render_template
app = Flask(__name__)
posts = [
{
'title': 'First Blog Post',
'date': '2023-10-27',
'content': 'This is the content of the first blog post.'
},
{
'title': 'Second Blog Post',
'date': '2023-10-28',
'content': 'This is the content of the second blog post.'
}
]
@app.route('/')
def index():
return render_template('index.html', posts=posts)
@app.route('/post/')
def post(post_id):
post = posts[post_id]
return render_template('post.html', post=post)
Näide 2: Mitmekeelne veebisait
Kujutage ette veebisaidi loomist, mis toetab mitut keelt. Mallipärilus aitab hallata erinevaid tekstielemente igal lehel. Saaksite luua baasmalli tõlgitud teksti kohatäidetega ja seejärel luua lapsmallid iga keele jaoks. Näiteks oletame, et teil on baasmall ja soovite toetada inglise ja prantsuse keelt.
base.html:
{% block title %}{% endblock %}
{% block content %}{% endblock %}
index_en.html (ingliskeelne versioon):
{% extends "base.html" %}
{% block title %}Welcome to My Website{% endblock %}
{% block home_link %}Home{% endblock %}
{% block about_link %}About{% endblock %}
{% block content %}
Welcome!
This is the English version of the homepage.
{% endblock %}
index_fr.html (prantsuskeelne versioon):
{% extends "base.html" %}
{% block title %}Bienvenue sur mon site web{% endblock %}
{% block home_link %}Accueil{% endblock %}
{% block about_link %}Ă€ propos{% endblock %}
{% block content %}
Bienvenue !
Ceci est la version française de la page d'accueil.
{% endblock %}
Selles lihtsustatud näites laiendab iga keeleversioon baasmalli ja pakub tõlgitud teksti pealkirja, navigeerimislinkide ja põhilise sisu jaoks. See lähenemine lihtsustab teie veebisaidi erinevate keeleversioonide haldamist.
Parimad tavad
- Hoidke baasmall lihtsana: Baasmall peaks sisaldama ainult olulisi elemente, mida jagatakse kõigil lehtedel.
- Kasutage kirjeldavaid ploki nimesid: Valige ploki nimed, mis selgelt näitavad nende eesmärki.
- Organiseerige oma mallid loogiliselt: RĂĽhmitage seotud mallid kataloogidesse.
- Vältige sügavalt pesastatud pärilikkust: Piirake pärilikkuse hierarhia sügavust, et vältida keerukust.
- Kasutage funktsiooni
super()
arukalt: Kasutage funktsioonisuper()
ainult siis, kui teil on vaja täiendada või muuta baasmalli ploki sisu. - Kaaluge mallikomponentide kasutamist: Keerukamate veebisaitide puhul kaaluge mallide jaotamist väiksemateks, taaskasutatavateks komponentideks. Seda saab saavutada Jinja2 includes või macros abil, kuid need peaksid täiendama, mitte asendama head pärimisstrateegiat.
Täpsemad tehnikad
1. Tingimuslik ploki ĂĽlekirjutamine
Saate oma mallides kasutada tingimuslikke avaldusi, et tingimuslikult plokke üle kirjutada teatud tingimuste alusel. See võimaldab teil kohandada oma lehtede sisu vastavalt kasutajarollidele, eelistustele või muudele teguritele.
{% extends 'base.html' %}
{% block content %}
{% if user.is_authenticated %}
Welcome, {{ user.username }}!
This is the content for authenticated users.
{% else %}
Welcome!
Please log in to access more content.
{% endif %}
{% endblock %}
2. Makrode kasutamine
Jinja2 makrod on sarnased Pythoni funktsioonidega. Need võimaldavad teil määratleda taaskasutatavaid HTML-koodi fragmente, mida saab kutsuda oma mallide seest. Makrosid saab kasutada mallikomponentide loomiseks, nagu vormielemendid, navigeerimismenüüd ja pildigaleriid.
Näide makro määratlemisest eraldi failis (macros.html
):
{% macro input(name, type='text', value='') %}
{% endmacro %}
Näide makro importimisest ja kasutamisest mallis:
{% from 'macros.html' import input %}
3. Mallifiltrid
Mallifiltrid võimaldavad teil muuta mallides olevate muutujate väljundit. Jinja2 pakub mitmeid sisseehitatud filtreid, nagu capitalize
, lower
, upper
ja date
. Saate määratleda ka oma kohandatud filtreid.
Näide date
filtri kasutamisest kuupäeva vormindamiseks:
Published on: {{ post.date | date('%Y-%m-%d') }}
Kokkuvõte
Flaski mallipärilus Jinja2 abil on võimas tehnika oma mallide organiseerimiseks, koodi taaskasutatavuse edendamiseks ja järjepidevuse tagamiseks kogu teie veebirakenduses. Mõistes baasmallide, ploki definitsioonide ja lapsmallide põhimõtteid, saate luua hästi struktureeritud ja hooldatavaid malle, mis lihtsustavad teie veebiarenduse töövoogu. Võtke omaks DRY (Ära korda ennast) põhimõte ja kasutage mallipärilust, et ehitada tugevaid ja skaleeritavaid veebirakendusi.
See põhjalik juhend on käsitlenud Flaski mallipäriluse põhiaspekte. Järgides käesolevas artiklis esitatud näiteid ja parimaid tavasid, saate oma Flaski projektides tõhusalt rakendada mallipäriluse ja luua hästi organiseeritud, hooldatavad ja järjepidevad veebirakendused ülemaailmsele publikule. Ärge unustage kohandada neid tehnikaid vastavalt oma projektide spetsiifilistele vajadustele ja uurige Jinja2 täiustatud funktsioone, et veelgi parandada oma mallidisaini võimalusi.